Namespaces
Variants

std::literals::chrono_literals:: operator""s

From cppreference.net
定义于头文件 <chrono>
constexpr std:: chrono :: seconds
operator "" s ( unsigned long long secs ) ;
(1) (C++14 起)
constexpr std:: chrono :: duration < /*unspecified*/ >
operator "" s ( long double secs ) ;
(2) (C++14 起)

形成一个表示秒的 std::chrono::duration 字面量。

1) 整数字面量,返回精确的 std:: chrono :: seconds ( secs )
2) 浮点数字面量,返回等价于 std::chrono::seconds 的浮点型时长。

目录

参数

secs - 秒数

返回值

std::chrono::duration 字面量。

可能的实现

constexpr std::chrono::seconds operator""s(unsigned long long s)
{
    return std::chrono::seconds(s);
}
constexpr std::chrono::duration<long double> operator""s(long double s)
{
    return std::chrono::duration<long double>(s);
}

注释

此运算符声明于命名空间 std :: literals :: chrono_literals 中,其中 literals chrono_literals 均为 内联命名空间 。可通过以下方式访问此运算符:

  • using namespace std :: literals
  • using namespace std :: chrono_literals ,或
  • using namespace std :: literals :: chrono_literals

此外,在命名空间 std :: chrono 中, 标准库 提供了指令 using namespace literals :: chrono_literals ; 。因此,若程序员使用 using namespace std :: chrono ; 来访问 chrono 库 中的类,相应的字面量运算符也会同时可见。

std::string 同时定义了 operator "" s 来表示 std::string 类型的字面量对象,但这属于字符串字面量: 10s 表示十秒,而 "10" s 表示一个双字符的字符串。

示例

#include <chrono>
#include <iostream>
int main()
{
    using namespace std::chrono_literals;
    std::chrono::seconds halfmin = 30s;
    std::cout << "半分钟是 " << halfmin.count() << " 秒"
        " (" << halfmin << ").\n"
        "一分钟加一秒是 " << (1min + 1s).count() << " 秒.\n";
    std::chrono::duration moment = 0.1s;
    std::cout << "一瞬间是 " << moment.count() << " 秒"
        " (" << moment << ").\n"
        "三倍时间是 " << (moment + 0.2s).count() << " 秒.\n";
}

输出:

半分钟是 30 秒 (30s).
一分钟加一秒是 61 秒.
一瞬间是 0.1 秒 (0.1s).
三倍时间是 0.3 秒.

参见

构造新的时长对象
( std::chrono::duration<Rep,Period> 的公开成员函数)